package com.newtouch.bxzs.enterprise.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.newtouch.bxzs.common.base.model.Conference;
import com.newtouch.bxzs.enterprise.model.bo.*;
import com.newtouch.bxzs.enterprise.model.vo.CustomerDetailVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 营销会议Mapper类
 *
 * <p>
 * <b>History:</b>
 * <table border="1">
 * <tr>
 * <th>Date</th>
 * <th>Operator</th>
 * <th>Memo</th>
 * </tr>
 * <tr>
 * <td>2021年1月18日</td>
 * <td>Amour</td>
 * <td>Create</td>
 * </tr>
 * </table>
 * 
 * @author Amour
 * 
 * @version 1.0.0
 * @since 1.0.0
 */
@Mapper
public interface ConferenceMapper extends BaseMapper<Conference> {

	/**
	 * 查询营销会议信息列表
	 * 
	 * @param userId
	 *            登录用户ID
	 * @param marketingConferenceDate
	 *            会议日期
	 * @param marketingConferenceStatus
	 *            会议状态
	 * @return
	 */
	IPage<ConferenceBO> getConferenceList(@Param("page") Page<ConferenceBO> page, @Param("userId") String userId,
			@Param("marketingConferenceDate") String marketingConferenceDate,
			@Param("marketingConferenceStatus") Integer marketingConferenceStatus,
			@Param("marketingConferenceTheme") String marketingConferenceTheme);

	/**
	 * 查询历史营销会议列表信息
	 * 
	 * @param page
	 * @param userId
	 *            登录用户ID
	 * @return
	 */
	IPage<ConferenceBO> getConferenceStoryList(@Param("page") Page<ConferenceBO> page, @Param("userId") String userId);

	/**
	 * 查询营销会议详情
	 * 
	 * @param userId
	 *            登录用户ID
	 * @param conferenceId
	 *            营销会议ID
	 * @return
	 */
	ConferenceDetailBO getConferenceDetail(@Param("userId") String userId, @Param("conferenceId") String conferenceId);

	/**
	 * 查询发布方营销会议客户详情
	 * 
	 * @param page
	 *            分页控件
	 * @param userId
	 *            登录用户ID
	 * @param conferenceId
	 *            营销会议ID
	 * @param customerName
	 *            客户姓名
	 * @return
	 */
	IPage<ConferenceActivityCustomerBO> getPublisherConferenceCustomerList(
			@Param("page") Page<ConferenceActivityCustomerBO> page, @Param("userId") String userId,
			@Param("conferenceId") String conferenceId, @Param("customerName") String customerName);

	/**
	 * 查询营销会议所有客户信息
	 * 
	 * @param conferenceId
	 *            营销会议ID
	 * @return
	 */
	List<CustomerInventoryBO> getConferenceCustomerList(@Param("conferenceId") String conferenceId);

	/**
	 * 查询接收方营销会议客户详情
	 * 
	 * @param page
	 *            分页控件
	 * @param userId
	 *            登录用户ID
	 * @param conferenceId
	 *            营销会议ID
	 * @param customerName
	 *            客户姓名
	 * @return
	 */
	IPage<ConferenceActivityCustomerBO> getAcceptionConferenceCustomerList(
			@Param("page") Page<ConferenceActivityCustomerBO> page, @Param("userId") String userId,
			@Param("conferenceId") String conferenceId, @Param("customerName") String customerName);

	/**
	 * 添加营销会议个人客户
	 * 
	 * @param conferenceId
	 *            营销会议ID
	 * @param list
	 *            需要新增的营销会议客户信息
	 */
	Integer insertConferenceCustomer(@Param("conferenceId") String conferenceId,
			@Param("createUserId") String createUserId, @Param("list") List<CustomerDetailVO> list);

	/**
	 * 删除营销会议个人客户
	 * 
	 * @param conferenceId
	 * @param customer
	 * @return
	 */
	Integer deleteConferencePersonalCustomer(@Param("conferenceId") String conferenceId,
			@Param("customerId") String customerId);

	/**
	 * 删除营销会议客户信息
	 * 
	 * @param conferenceId
	 *            营销会议ID
	 * @return
	 */
	Integer deleteConferenceCustomer(@Param("conferenceId") String conferenceId);

	/**
	 * 删除营销会议产品信息
	 * 
	 * @param conferenceId
	 *            营销会议ID
	 * @return
	 */
	Integer deleteConferenceProduct(@Param("conferenceId") String conferenceId);

	/**
	 * 添加营销会议产品信息
	 * 
	 * @param conferenceId
	 *            营销会议ID
	 * @param createUserId
	 *            创建人ID
	 * @param list
	 *            产品ID集合
	 * @return
	 */
	Integer insertConferenceProduct(@Param("conferenceId") String conferenceId,
			@Param("createUserId") String createUserId, @Param("list") List<String> list);

	/**
	 * 移除营销会议客户与本端用户对应关系
	 * 
	 * @param conferenceId
	 *            营销会议ID
	 * @param list
	 *            本端用户ID集合
	 * @return
	 */
	Integer updateConferenceCustomerUser(@Param("conferenceId") String conferenceId, @Param("list") List<String> list);

	/**
	 * 删除本端用户与营销会议关联表
	 * 
	 * @param conferenceId
	 *            营销会议ID
	 * @param list
	 *            本端用户ID集合
	 * @return
	 */
	Integer deleteConferenceUser(@Param("conferenceId") String conferenceId);

	/**
	 * 新增营销会议与用户关联表数据
	 * 
	 * @param conferenceId
	 *            营销会议ID
	 * @param createUserId
	 *            登录用户ID
	 * @param list
	 *            本端用户ID集合
	 * @return
	 */
	Integer insertConferenceUser(@Param("conferenceId") String conferenceId, @Param("createUserId") String createUserId,
			@Param("list") List<String> list);

	/**
	 * 新增营销会议与用户关联表数据(推送时)
	 * 
	 * @param conferenceId
	 *            营销会议ID
	 * @param list
	 *            用户工号集合
	 * @return
	 */
	Integer insertConferenceUserByJobNumber(@Param("conferenceId") String conferenceId,
			@Param("list") List<String> list,@Param("isAcception") boolean isAcception);

	/**
	 * 新增营销会议与对端用户关联表数据(推送时)
	 *
	 * @param conferenceId
	 *            营销会议ID
	 * @param list
	 *            用户工号集合
	 * @return
	 */
	Integer insertConferenceCooperationUserByJobNumber(@Param("conferenceId") String conferenceId,
											@Param("list") List<String> list,@Param("isAcception") boolean isAcception);


	/**
	 * 删除营销会议与合作公司用户关联表数据
	 * 
	 * @param conferenceId
	 *            营销会议ID
	 * @return
	 */
	Integer deleteConferenceCooperationUser(@Param("conferenceId") String conferenceId);

	/**
	 * 新增营销会议与合作公司用户关联表数据
	 * 
	 * @param conferenceId
	 *            营销会议ID
	 * @param createUserId
	 *            登录用户ID
	 * @param list
	 *            合作用户ID集合
	 * @return
	 */
	Integer insertConferenceCooperationUser(@Param("conferenceId") String conferenceId,
			@Param("createUserId") String createUserId, @Param("list") List<String> list);

	/**
	 * 获取客户分配情况列表
	 * 
	 * @param page
	 *            分页
	 * @param conferenceId
	 *            营销会议ID
	 * @param distributionFlag
	 *            是否查询已分配客户
	 * @return
	 */
	IPage<ConferenceActivityCustomerBO> getDistributionCustomerList(
			@Param("page") Page<ConferenceActivityCustomerBO> page, @Param("conferenceId") String conferenceId,
			@Param("distributionFlag") Boolean distributionFlag);

	/**
	 * 保存分配客户信息
	 * 
	 * @param conferenceId
	 *            营销会议id
	 * @param userId
	 *            用户id
	 * @param customerId
	 *            客户id
	 * @return
	 */
	Integer updateDistributionCustomer(@Param("conferenceId") String conferenceId, @Param("userId") String userId,
			@Param("customers") List<CustomerInventoryBO> customerList);

	/**
	 * 参会签到
	 * 
	 * @param conferenceId
	 *            营销会议id
	 * @param customerId
	 *            客户id
	 * @return
	 */
	Integer customerAttendance(@Param("conferenceId") String conferenceId, @Param("customerId") String customerId);

	/**
	 * 修改会议状态
	 * 
	 * @param conferenceId
	 *            营销会议id
	 * @return
	 */
	Integer updateConferenceStatus(@Param("conferenceId") String conferenceId,
			@Param("marketingConferenceStatus") String marketingConferenceStatus);

	/**
	 * 查询营销会议统计信息
	 * 
	 * @param conferenceId
	 *            营销会议id
	 * @return
	 */
	ConferenceActivityStatisticsBO getConferenceStatistics(@Param("conferenceId") String conferenceId);

	/**
	 * 获取营销会议产品列表
	 * 
	 * @param page
	 *            分页
	 * @param conferenceId
	 *            营销会议ID
	 * @param productName
	 *            产品名称
	 * @return
	 */
	IPage<ConferenceActivityProductBO> getConferenceProduct(@Param("page") Page<ConferenceActivityProductBO> page,
			@Param("conferenceId") String conferenceId, @Param("productName") String productName);

	/**
	 * 查询营销会议本端用户信息
	 * 
	 * @param page
	 *            分页
	 * @param conferenceId
	 *            营销会议ID
	 * @param selectCondition
	 *            查询条件
	 * @return
	 */
	IPage<ConferenceActivityUserBO> getConferenceUser(@Param("page") Page<ConferenceActivityUserBO> page,
			@Param("conferenceId") String conferenceId, @Param("selectCondition") String selectCondition);

	/**
	 * 查询营销会议合作公司用户信息
	 * 
	 * @param page
	 *            分页
	 * @param conferenceId
	 *            营销会议ID
	 * @param selectCondition
	 *            查询条件
	 * @return
	 */
	IPage<ConferenceActivityUserBO> getConferenceCooperationUser(@Param("page") Page<ConferenceActivityUserBO> page,
			@Param("conferenceId") String conferenceId, @Param("selectCondition") String selectCondition);

	/**
	 * 参加营销会议
	 * 
	 * @param userId
	 *            用户ID
	 * @return
	 */
	Integer joinConference(@Param("userId") String userId, @Param("conferenceId") String conferenceId);

	/**
	 * 电话联系客户
	 * 
	 * @param conferenceId
	 *            会议ID
	 * @return
	 */
	Integer contactCustomer(@Param("conferenceId") String conferenceId, @Param("customer") CustomerDetailVO customer);

	/**
	 * 修改营销会议与客户关联表中的客户ID
	 * 
	 * @param conferenceId
	 *            会议ID
	 * @param customer
	 *            客户信息
	 * @return
	 */
	Integer updateCustomerId(@Param("conferenceId") String conferenceId, @Param("customer") CustomerDetailVO customer);

	/**
	 * 根据产品ID获取编码
	 * 
	 * @param list
	 * @return
	 */
	List<String> getProductCodeById(@Param("list") List<String> list);

	/**
	 * 根据产品编码获取产品ID
	 * 
	 * @param list
	 * @return
	 */
	List<String> getProductIdByCode(@Param("list") List<String> list);

	/**
	 * 接收营销会议（接收时）
	 * @param conference
	 * @return
	 */
	int insertConference(Conference conference);

	/**
	 * 根据营销会议id查询参会公司统一社会信用代码
	 * @param conferenceId 营销会议id
	 * @return 参会公司统一社会信用代码
	 */
	List<String> getUnifiedSocialCreditCodeByConference(String conferenceId);
}
